package com.hw.protocol.tool.decode.hw;

import com.hw.protocol.tool.model.entity.hw.AbsPressMeter;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

/**
 * @author : lihy
 * @date : 2023/3/23 15:17
 * description: 压力计解码器模板
 */
public class PressMeterDecodeTemplate {

    private AbsPressMeter pm;
    ByteBuf dataBuf;

    public PressMeterDecodeTemplate(AbsPressMeter pm, byte[] data) {
        this.pm = pm;
        this.dataBuf = Unpooled.wrappedBuffer(data);
    }

    /**
     * 设置时间（历史数据）
     */
    void setTime() {}

    /**
     * 设置meterType
     */
    void setMeterType() {
        pm.setMeterType(dataBuf.readShortLE());
    }

    /**
     * 设置报警数据
     */
    void setAlarm(){}

    /**
     * 设置压力数据
     */
    void setPress(){}

    /**
     * 设置flag
     */
    void setFlag() {
        byte[] flag = new byte[4];
        dataBuf.getBytes(dataBuf.capacity() - 4, flag);
        pm.setFlag(flag);
    }

    /**
     * 组装数据
     */
    public void buildObject() {
        if (hisData()) {
            //历史数据
            setTime();
        }
        setMeterType();
        setAlarm();
        setPress();
        setFlag();

        //释放内存
        dataBuf.release();
    }

    /**
     * 历史数据
     */
    boolean hisData() {
        return false;
    }
}
